TFS install

TFS install

  • 1. 硬盘分区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    parted /dev/sdb
    print
    mklabel gpt
    mkpart primary 1 -1
    quit
    mkfs.ext4 /dev/sdb1
    e2label /dev/sdb1 /data/disk1

    parted /dev/sdc
    print
    mklabel gpt
    mkpart primary 1 -1
    quit
    mkfs.ext4 /dev/sdc1
    e2label /dev/sdc1 /data/disk2

    parted /dev/sda
    print
    mklabel gpt

这里系统盘会占用一些空间,从300GB开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkpart primary 300GB 6001GB
quit
mkfs.ext4 /dev/sda4
e2label /dev/sda4 /data/disk3

vim /etc/fstab
加入:
LABEL=/data/disk1 /data/disk1 ext4 defaults 1 2
LABEL=/data/disk2 /data/disk2 ext4 defaults 1 2
LABEL=/data/disk3 /data/disk3 ext4 defaults 1 2

mount -t ext4 /dev/sda4 /data/disk1
mount -t ext4 /dev/sdb1 /data/disk2
mount -t ext4 /dev/sdb2 /data/disk3

2. TFS 格式化数据盘

1
./script/stfs format 1-3

由于硬盘比较大 耗时会比较长

格式化成功后,会发现/data/disk1,/data/disk2, /data/disk3 下面产生了一堆以数字命名的文件(1-n),因为TFS的block文件是以数字命名的,从1开始递增编号。

3. 启动NameServer

1
./bin/nameserver -f conf/ns.conf -d

4. 启动DataServer

1
2
3
./bin/dataserver -f conf/ds.conf -i 1 -d
./bin/dataserver -f conf/ds.conf -i 2 -d
./bin/dataserver -f conf/ds.conf -i 3 -d

5. 测试

./bin/tfstool -s 33.73.192.37:8100 -i "put testfile"

将本地testfile存入tfs, -s 指定nameserver的ip:port。 如果成功,会打印 put testfile => T1QEBXXDpXXXXXXXXX success. 类似的消息,其中T开头一串字符是TFS为这个文件生成的文件名,一共18个字符;要想从TFS取出该文件时,需要指定该文件名。

./bin/tfstoo -s 33.73.192.371:8100 -i "get T1QEBXXDpXXXXXXXXX localfile"

从TFS读取T1QEBXXDpXXXXXXXXX,存储到本地localfile中;如果成功,会打印fetch T1QEBXXDpXXXXXXXXX => localfile success.类似的消息。

6. 通过浏览器访问

  • 防火墙
    1
    2
    firewall-cmd --permanent --add-port=7500/tcp
    systemctl restart firewalld.service

http://33.73.192.37:7500/v1/tfs/T1DyhTByJT1RCvBVdK

7. TODO

  • [ ] TFS Nameserver HA配置

8. 参考

附

  1. NS.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [public]
    log_size=1073741824
    log_num=64
    log_level=info
    task_max_queue_size=10240
    emergency_replicate_queue=5 # 网上的资料没看到这个配置,不加的话会一直打印日志
    work_dir=/home/tfs/tfs
    dev_name=enp1s0f0 # server使用的网卡名,需要修改为你机器的某个网卡名
    ip_addr=33.73.192.37 # server服务的ip地址,必须是dev_name网卡上的IP地址,如果NS配置了HA,此处配置vip
    port=8100 #server服务的端口号,根据实际环境修改, 该配置项建议所有DS保持相同

    [nameserver]
    safe_mode_time=360 #seconds NS启动后的保护时间,在该时间内,NS不会构建任何复制、迁移等任务
    ip_addr_list=33.73.192.37|192.168.0.254 #如果使用HA,则配置vip对应的两个节点的实际ip;如果没有使用HA,第一项配置与ip_addr相同,第二项可以随便配置一个无效的地址(如本例中192.168.0.254是无效的IP地址)
    group_mask=255.255.255.224 #用于区分机架的子网掩码,可根据实际网络环境修改。如果你配置为255.255.255.255,那么任意两个ip不同的机器都被认为在不同的机架;如果你配置为255.255.255.0, 那么192.168.0.x与192.168.0.y将被认为在同一个机架,依次类推;TFS数据块的多个副本不能分布在同一个机架内,以提高可靠性。
    max_replication=1 # 副本数,机器数必须大于副本数,单机环境测试,只能设置为1,否则不能存数据
    cluster_id=1 #集群ID,存文件后生成的文件名会包含这个ID,建议不修改
    block_max_size=75497472 #Bytes,保持与dataserver下mainblock_size配置一致,建议不修改
    repl_wait_time=180 # seconds 当NS检测到block丢失时,等待多长时间开始复制block,可根据实际情况修改
    compact_delete_ratio=10 # 代表10%,当NS发现block中文件删除比例超出该比例,开始对block进行压缩,回收删除文件的存储空间
    compact_hour_range=1~5 #代表1点~5点,NS只会在1-50点间进行block压缩,建议设置为访问低峰时间段
    balance_percent=0.05 # 代表5%,负载均衡时,当DS存储容量超出平均值5%时,就会被选择为数据迁移源,低于平均值5%,就会被选为数据迁移目标
  2. DS.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    [public]
    log_size=1073741824
    log_num=64
    log_level=info
    task_max_queue_size=10240
    work_dir=/home/tfs/tfs
    dev_name=enp1s0f0 # server使用的网卡名,需要修改为你机器的某个网卡名
    ip_addr=33.73.192.37 # server服务的ip地址,必须是dev_name网卡上的IP地址,如果NS配置了HA,此处配置vip
    port=8200 #server服务的端口号,根据实际环境修改, 该配置项建议所有DS保持相同

    [dataserver]
    ip_addr=33.73.192.37 # NS的ip地址,如果配置了HA,则为vip
    ip_addr_list=33.73.192.37 #|192.168.0.254 # 与nameserver区域的ip_addr_list配置保持一致(254这个如果保留会一直打印错误日志)
    port=8100 # NS服务监听的端口
    heart_interval=2 #seconds,DS向NS发送心跳的时间间隔,可根据实际环境修改
    mount_name=/data/disk #DS数据目录,如果机器上有2块盘,则它们应该挂载在/data/disk1、/data/disk2,依次类推
    mount_maxsize=5205042452 # KB, 磁盘实际使用的空间,应该小于df命令Available一项的输出
    base_filesystem_type = 1

    #超级块存存储的保留位置,default: 0
    superblock_reserve = 0

    #平均文件的大小, 单位(字节) 100K
    avg_file_size = 102400

    #主块的大小, 单位(字节)
    #每个数据存储块的大小
    mainblock_size = 7549747

    #扩展块的大小, 单位(字节)
    extblock_size = 419430

    #主块与扩展的比例
    block_ratio = 0.5

    #hash桶的比例
    hash_slot_ratio = 0.5

    ds_thread_count = 4
  3. Nginx-TFS部分配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    http {
    include mime.types;
    default_type application/octet-stream;

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log logs/access.log main;

    sendfile on;
    #tcp_nopush on;

    #keepalive_timeout 0;
    keepalive_timeout 65;

    gzip on;
    tfs_upstream tfs_ns {
    server 127.0.0.1:8100;
    type ns;
    }
    server {
    listen 7500;
    server_name localhost;

    tfs_keepalive max_cached=100 bucket_count=10;
    //cronolog 没装 tfs_log "pipe:/usr/sbin/cronolog -p 30min /path/to/nginx/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log";
    tfs_log "/home/tfs/nginxtfs/install/nginx/logs/tfs_access.log";
    location = /favicon.ico {
    log_not_found off;
    }
    location / {
    tfs_pass tfs://tfs_ns;
    }
    }
    }
文章目录
  1. 1. 1. 硬盘分区
  2. 2. 2. TFS 格式化数据盘
  3. 3. 3. 启动NameServer
  4. 4. 4. 启动DataServer
  5. 5. 5. 测试
  6. 6. 6. 通过浏览器访问
  7. 7. 7. TODO
  8. 8. 8. 参考
  9. 9. 附
,